package com.pi.shisan.service.service;

import com.pi.shisan.service.dto.AudioInfoDTO;
import com.pi.shisan.service.dto.ClockInfoDTO;
import com.pi.shisan.service.dto.Result;
import com.pi.shisan.service.dto.RunnableClockInfo;

import java.util.List;

/**
 * 闹铃信息的增删改查
 *
 * 闹铃添加开关
 * 失效bug解决下
 * 法定节假日问题
 */
public interface ClockInfoService {

    /**
     * 创建或修改一个闹铃
     * @param param
     */
    Result<Long> createOrUpdateClock(ClockInfoDTO param);

    /**
     * 打开关闭闹铃
     * @param param
     */
    void onOffClock(ClockInfoDTO param) throws Exception;

    /**
     * 为闹铃添加一个音乐并修改它的重复次数
     * @param audioInfoDTO
     */
    Long addOrUpdateClockAudio(AudioInfoDTO audioInfoDTO);

    /**
     * 设置闹铃音量
     * @param id
     * @param volume
     */
    void updateVolume(Long id, Integer volume);

    /**
     * 闹铃删除
     * @param id
     */
    void deleteClock(Long id);

    /**
     * 删除闹铃里的音频；
     * 这里仅删除关联，不会删除物理文件
     * @param id
     */
    void deleteAudio(Long id);


    /**
     * 分页获取所有的闹铃设定
     * @return
     */
    List<ClockInfoDTO> getClockList();

    /**
     * 根据闹铃ID获取
     * @param id
     * @return
     */
    ClockInfoDTO getClockById(Long id);

    /**
     * 初始化任务列表
     */
    void initPlans();

    void refreshChinaVacation();

    /**
     * 获取下一个即将要执行的闹铃
     * @param remove 如果为true，表示如果当前有需要执行的闹铃，则返回，且从队列中移除
     *               如果为false，表示获取下一个要执行的闹铃，即便当前没有要执行的也会返回，不会从队列中移除
     * @return
     */
    RunnableClockInfo getNextClockInfo(boolean remove);


    int clearHourInfo(Long id);

    int clearWeekInfo(Long id);

    int clearDayInfo(Long id);

    int clearMonthInfo(Long id);

    int clearYearInfo(Long id);
}
